/* 
 * 类定义模板.
 * 采用工厂式新建对象方法, 
 * 用var myClass = class()生成对象, 
 * 继承时用工厂式方法新建基类对象然后再添加key.
 */

function note(myNoteName){
    
    /* class类定义开始 */
    //新建一个Object, 最后返回该obj, 全程不需要用this关键字
	var obj={};

    /* 私有变量定义 */

    //笔记名称,可变
    var noteName=myNoteName
    //所有笔记构成的json对象,每次更新都更新它,写入读取也是读写它
    var noteJson;
    //其实是作常量用,json的key
    var NOTEKEY='NOTE';
    

    /* 公有变量 */

    /* 公有方法 */

    //返回笔记的key列表
    obj.getKeyList=function(){
        result=[];
        for(key in noteJson){
            result.push(key);
        }                 
        return result;
    }

    //返回某一key的value
    obj.getValue=function(key){
        return noteJson[key];
    }

    //返回整个笔记的json字符串
    obj.getAllJson=function(){
        return JSON.stringify(noteJson);
    }

    //加入一个key,value,即新添加笔记或更新笔记,key是标题,value是内容
    obj.newNote=function(key,value){
        noteJson[key]=value;
        save();
    }

    //删除一个key
    obj.delNote=function(key){
        delete noteJson[key];
        save();
    }

    //清空所有!慎用!
    obj.clear=function(){
        noteJson={};
        save();
    }

    //返回整个笔记的json字符串
    obj.toJson=function(){
        return JSON.stringify(noteJson);
    }

    //增加一个json,用于导入笔记
    obj.addJson=function(newJson){
        for(key in newJson){
            noteJson[key]=newJson[key];
        }
        save();
    }

    /* 私有方法 */

    //保存
    function save(){
        localStorage.setItem(NOTEKEY,JSON.stringify(noteJson));
    }

    /* 构造, 没有构造方法, 直接写入构造代码 */

    localStorage.sitename=noteName;
    noteJson=JSON.parse(localStorage.getItem(NOTEKEY));
    if(!noteJson){
        noteJson={};
    }
    console.log('note created!');

    /* note类定义结束 */

    return obj;

}


